package cn.edu.jxau.util;

abstract public class List<T> implements Iterable<T> {
    
    /**
     * 列表中元素个数
     * @return
     */
    public abstract int size();
    
    /**
     * 列表是否为空
     * @return
     */
    public boolean isEmpty() {
        return size() == 0;
    }
    
    /**
     * 向列表指定位置添加item
     * @param i
     * @param item
     */
    public abstract void add(int i, T item);
    
    /**
     * 在列表尾端添加一个元素
     * @param item
     */
    public void addLast(T item) {
        add(size(), item);
    }

    /**
     * 在列表首端添加一个元素
     * @param item
     */
    public void addFirst(T item) {
        add(0, item);
    }
    
    /**
     * 获取列表中指定索引处的元素
     * @param i
     * @return
     */
    public abstract T get(int i);
    
    /**
     * 删除指定的元素
     * @param item
     */
    public abstract void remove(T item);
    
    public void removeFirst() {
        remove(0);
    }
    
    public void removeLast() {
        remove(size()-1);
    }
    
    /**
     * 删除指定位置的元素
     * @param i
     */
    public abstract T remove(int i);
    
    /**
     * 判断列表中是否包含指定的元素
     * @param item
     * @return
     */
    public boolean contains(T item) {
        return indexOf(item) != -1;
    }

    /**
     * 获取列表中指定元素的索引值，如果不存在则返回-1
     * @param item
     * @return
     */
    public abstract int indexOf(T item);
    
    /**
     * 设置指定位置的元素值
     * @param i
     * @param item
     */
    public abstract void set(int i, T item);
    
    @Override
    public abstract String toString();
}
